import random
import time
from datetime import datetime, timedelta
import requests


def download_file(url, file_name):
    """
    下载文件
    :param url: 文件的URL
    :param file_name: 保存文件的名称
    """
    # 发起GET请求
    response = requests.get(url, stream=True)
    # print(response)
    # 确保请求成功,如果不成功会抛出异常
    response.raise_for_status()

    # 使用with语句打开文件，确保正确关闭
    with open(file_name, 'wb') as file:
        # 分块写入文件
        for chunk in response.iter_content(chunk_size=8192):
            if chunk:  # 过滤掉keep-alive新发送的空包
                file.write(chunk)
            # 使用示例
    time.sleep(random.randint(1, 60))

def is_working_day(date):
    # 判断日期是否为周末
    if date.weekday() >= 5:  # 5和6分别代表周六和周日
        return False

    # 判断日期是否为法定节假日
    # 这里可以根据实际需求添加法定节假日的判断逻辑
    # 如果存在特定的法定节假日列表，可以在此处进行判断

    # 如果以上条件都不满足，则认为是法定工作日
    return True


# 设定开始日期
stat_date = datetime(2024, 1, 2).date()
print(stat_date)
# 当前日期
current_date = datetime.now().date()
# 默认就是-- 格式，不需要格式化 formatted_date = current_date.strftime("%Y-%m-%d")  # 年-月-日
print("当前日期是:", current_date)

# 循环跳出的日期，当前日期加一天
one_day_later = current_date + timedelta(days=1)
print("一天后:", one_day_later)

file_path = 'D:\\workspace\\python_all\\zz_download_file\\rzrq\\sz_'
# 开始循环处理
while stat_date < one_day_later:
    print(stat_date )
    # 如果是工作日，则开启下载
    if is_working_day(stat_date):
        random_str = ''.join([str(random.randint(0, 9)) for _ in range(16)])
        # 拼接url url = 'https://www.szse.cn/api/report/ShowReport?SHOWTYPE=xlsx&CATALOGID=1837_xxpl&txtDate=2024-07-08&tab2PAGENO=1&random=0.9970942990905536&TABKEY=tab2'
        url = 'https://www.szse.cn/api/report/ShowReport?SHOWTYPE=xlsx&CATALOGID=1837_xxpl&txtDate=' + stat_date.strftime('%Y-%m-%d') + '&tab2PAGENO=1&random=0.'+random_str+'&TABKEY=tab2'
        download_file(url, file_path + stat_date.strftime('%Y-%m-%d')+'.xlsx')
    stat_date = stat_date + timedelta(days=1)
print('下载完成')



# if stat_date < one_day_later:
#     print("date1 is earlier than date2")
# else:
#     print("date1 is equal to date2")


# is_business_day_today = is_business_day(current_date)
# print(is_business_day_today)